# @timing_decorator
def get_modules_by_select(tree, filter_data):
    # 递归函数，用于遍历树并找到所有匹配status和name的模块及其所有子节点
    def traverse_and_filter(node):

        # 默认为True，不匹配直接返回
        judge = True
        for key, value in filter_data.items():
            judge = judge and (value is None or value in str(node[key]))
            if not judge:
                break

        # 如果当前节点匹配status和name，则保留该节点及其所有子节点
        if judge:
            # 直接返回当前节点及其所有子节点
            return node.copy()

        # 如果当前节点不匹配，继续遍历子节点
        filtered_children = []
        for child_node in node.get('child', []):
            child_result = traverse_and_filter(child_node)
            if child_result:
                filtered_children.append(child_result)

        # 如果子节点中有匹配的，则保留当前节点，包含所有子节点
        if filtered_children:
            filtered_node = node.copy()
            filtered_node['child'] = filtered_children
            return filtered_node

        # 如果没有匹配的子节点，返回None
        return None

    # 遍历整棵树，应用筛选条件
    filtered_tree = {}
    for mod_id, mod_node in tree.items():
        result = traverse_and_filter(mod_node)
        if result:
            filtered_tree[mod_id] = result

    return filtered_tree

import json
with open('/media/977GB/wcj_work/禅道/新视图开发/zentao/1.json', 'r') as f:
    data = json.load(f)
# data = {'138': {'id': 'module-138', 'name': '报告工具', 'status': '进行中', 'category': '', 'pri': '', 'begin': '2024-09-09', 'end': '2024-11-03', 'assignedTo': '李旺', 'type': 'module', 'child': [{'id': 'story-312', 'module': 138, 'name': '【地侧】10KV油浸式变压器检测项数据导入', 'status': '已完成', 'category': '功能', 'pri': 3, 'begin': '', 'end': '', 'assignedTo': '李旺', 'type': 'story', 'child': []}, {'id': 'story-327', 'module': 138, 'name': '抽样单信息自动推送到报告编辑环节', 'status': '已完成', 'category': '功能', 'pri': 3, 'begin': '', 'end': '', 'assignedTo': '李旺', 'type': 'story', 'child': []}, {'id': 'story-3241', 'module': 138, 'name': '需求1', 'status': '已完成', 'category': '性能', 'pri': 3, 'begin': '2024-09-09', 'end': '2024-09-09', 'assignedTo': '', 'type': 'story', 'child': [{'id': 'story-3242', 'module': 0, 'name': '需求1.1', 'status': '已完成', 'category': '接口', 'pri': 3, 'begin': '2024-09-09', 'end': '2024-09-09', 'assignedTo': '', 'type': 'story', 'child': []}]}, {'id': 'story-3246', 'module': 138, 'name': '333', 'status': '超期告警', 'category': '功能', 'pri': 3, 'begin': '2024-11-01', 'end': '2024-11-03', 'assignedTo': '', 'type': 'story', 'child': [{'id': 'story-3248', 'module': 139, 'name': '333的子需求', 'status': '超期告警', 'category': '接口', 'pri': 3, 'begin': '2024-09-09', 'end': '2024-09-09', 'assignedTo': '', 'type': 'story', 'child': []}]}]}}

print(get_modules_by_select(data,{'type': 'module', 'id': '138'}))